package com.huitone.gddw.service.impl.system;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.huitone.gddw.dao.entity.DeptSrvNode;
import com.huitone.gddw.dao.system.IDeptSrvNodeDao;
import com.huitone.gddw.service.system.IDeptSrvNodeService;
import com.huitone.gddw.utils.StringUtils;
import com.huitone.gddw.utils.SysLoginUtil;

/**
 * 单位业务端管理 接口实现类
 * @author wuluodan
 *
 */
@Service
public class DeptSrvNodeService implements IDeptSrvNodeService {

	@Autowired
	private IDeptSrvNodeDao deptSrvNodeDao;
	
	@Override
	public void delAllByDeptId(String deptId) {
		deptSrvNodeDao.delAllByDeptId(deptId);
	}

	@Override
	public List<DeptSrvNode> getByDeptId(String deptId) {
		return deptSrvNodeDao.getByDeptId(deptId);
	}

	@Override
	public void changeDeptSvrNodes(String deptId, String svrNodes) {
		List<String> list = StringUtils.isBlank(svrNodes) ? new ArrayList<String>() : Arrays.asList(svrNodes.split(","));
		List<String> listSave = new ArrayList<String>();
		List<String> listDel = new ArrayList<String>();
		List<String> listAll = this.getSvrNodesByDeptIdId(deptId);
		for (String s : list) {
			if (!listAll.contains(s)) {
				listSave.add(s);
			}
		}
		for (String s : listAll) {
			if (!list.contains(s)) {
				listDel.add(s);
			}
		}
		this.updateByDeptId(deptId, listSave, listDel);
	}
	
	/**
	 * 根据单位ID保存/删除角色权限
	 * @param deptId 单位ID
	 * @param listSave 保存列表
	 * @param listDel 删除列表
	 */
	private void updateByDeptId(String deptId, List<String> listSave, List<String> listDel) {
		List<DeptSrvNode> list = new ArrayList<DeptSrvNode>();
		for (String s : listSave) {
			DeptSrvNode entity = new DeptSrvNode();
			entity.setDeptId(deptId);
			entity.setSvrNode(s);
			list.add(entity);
		}
		this.saveBatch(list);
		this.deleteByNode(deptId, listDel);
	}
	
	/**
	 * 批量保存
	 * @param list
	 */
	private void saveBatch(List<DeptSrvNode> list) {
		for (DeptSrvNode deptSrvNode : list) {
			deptSrvNode.setRecId(StringUtils.uuid());
			deptSrvNode.setInsertTime(new Date());
			deptSrvNode.setInsertStaffId(SysLoginUtil.getLoginUserId());
			deptSrvNode.setLastModTime(deptSrvNode.getInsertTime());
			deptSrvNode.setLastModStaffId(deptSrvNode.getInsertStaffId());
		}
		if (!list.isEmpty() && list.size() > 0) {
			deptSrvNodeDao.insertBatch(list);
		}
	}
	
	/**
	 * 获取单位所有业务端编码
	 * @param deptId 单位ID
	 * @return List
	 */
	private List<String> getSvrNodesByDeptIdId(String deptId) {
		List<String> listSvrNode = new ArrayList<String>();
		List<DeptSrvNode> list = this.getByDeptId(deptId);
		for (DeptSrvNode deptSrvNode : list) {
			listSvrNode.add(deptSrvNode.getSvrNode());
		}
		return listSvrNode;
	}
	
	/**
	 * 批量删除
	 * @param deptId 单位ID
	 * @param listDel
	 */
	private void deleteByNode(String deptId, List<String> listDel) {
		if (!listDel.isEmpty() && listDel.size() > 0) {
			Map<String, Object> map = new HashMap<String, Object>();
			map.put("deptId", deptId);
			map.put("list", listDel);
			deptSrvNodeDao.deleteByNode(map);
		}
	}

}
